import qs from 'qs'
import axios from 'axios'

// 用于存储当前正在进行的请求
const pendingRequests = new Map()

// 生成请求标识
function generateReqKey(config) {
    // 从配置中获取请求方法、URL和参数
    const { method, url, params, data } = config
    // 将参数序列化，确保相同参数的请求会被视为同一个请求
    return [method, url, qs.stringify(params), qs.stringify(data)].join('&')
}

// 添加请求到 pendingRequests
function addPendingRequest(config) {
    const requestKey = generateReqKey(config)
    config.requestKey = requestKey
    // 为当前请求创建一个取消令牌
    config.cancelToken = config.cancelToken || new axios.CancelToken(cancel => {
        if (!pendingRequests.has(requestKey)) {
            pendingRequests.set(requestKey, cancel)
        }
    })
}

// 移除并取消请求
function removePendingRequest(config) {
    const requestKey = config.requestKey
    // 如果存在该请求标识，取消请求并从 pendingRequests 中移除
    if (requestKey && pendingRequests.has(requestKey)) {
        const cancel = pendingRequests.get(requestKey)
        cancel(`已取消重复请求: ${requestKey}`)
        pendingRequests.delete(requestKey)
    }
}

export default {
    addPendingRequest,removePendingRequest
}